# 元组
# 只有一个元素时，末尾加,
# 应用场景
# 1.函数的参数和返回值
# 2.格式化输出本质上是元组

# 字典
# 基本格式：{键名：值}
# 字典中的键唯一性，不会报错 前面的值会被后面的值覆盖
dict = {'name':'hello','age':18 }
print(type(dict))

# 字典常见操作
# 查看
# 1.变量名[键名]
# 2.变量名.get(键名)
print(dict['name']) # 如果键名不存在 则会报错
print(dict.get('name')) # 如果键名不存在返回None
print(dict.get('tel','不存在')) # 可以设置自定义的默认值

# 修改
dict['age'] = 19
print(dict)

# 添加元素
# 键名存在就修改，不存在就新增
dict['tel'] = 12345
dict['name'] = 'helloworld'
print(dict)

# 删除元素
# del 字典名 删除整个元素   del 字典名[键名] 如果不存在报错
# clear 清空整个字典
# pop 删除自定键值对 不存在键名 报错
dict.popitem() # 3.7 之前的版本是随机删除一个键值对
print(dict)

# 字典常见操作
# len() 长度
print(len(dict))
# keys()
print(dict.keys())

for key in dict.keys():
    print(key)

# values()
for value in dict.values():
    print(value)

# items()
print(dict.items())
for key, value in dict.items():
    print(key, value)

# 集合 无序 唯一
s1 = {1,2,3,4,5,6,7,8,9,10}
print(s1)
# 如果创建空集合 不用 set = {} 而用 set = set()
set1 = {}
print(type(set1))
s1 = set()
print(type(s1))

# 集合无序的实现方式涉及hash表 int整型 的hash就是其本身
# 集合常见操作
# add 制添加一个
s1.add(1)
print(s1)
# update
s1.update([2,3,4])
print(s1)
s1.update({'name':6,'age':12})
print(s1)

# remove 删除元素 如果没有就报错
s1.remove(1)
print(s1)

# pop 删除第一个元素，因为无序 所以删除也无序
s1.pop()
print(s1)

# 有就删除 没有不报错
s1.discard(2)
print(s1)

# 交集
a = {1,2,3,4}
b = {3,4,5,6}
c = {5,6,7,8}
print(a & b)
print(a & c)
print(a | b)
print(a | c)